perm filename PALINL.LST[S1,ALS] blob
sn#483577 filedate 1979-10-26 generic text, type T, neo UTF8
PASCAL/SAIL 1.1 6-SEP-79 COMPILATION LIST PRODUCED ON 26-OCT-79 AT 13:34:47 PAGE 1
1 C;
PASCAL/SAIL 1.1 6-SEP-79 COMPILATION LIST PRODUCED ON 26-OCT-79 AT 13:34:47 PAGE 2
1 (* $A+,D+*)
2
3 PROGRAM PALINDROME(OUTPUT);
4
5 CONST NUMMAX = 4; PALMAX = 100; NUMLIM = 7; PALLIM = 101;
6 TABMAX = 500; TABLIM = 501;
7 VAR C, I, J, K, L, M, N, NXTOT, TABL, NMAX, NMIN, DCLASS,
8 NUMVAL, CVAL, CVAL2, PALTOT, PALVAL, CARRY : INTEGER;
9 CMIN, CMAX : INTEGER;
10 NUM : ARRAY [1..NUMLIM] OF INTEGER;
11 PAL, PAL2 : ARRAY [1..PALLIM] OF INTEGER;
12 TAB : ARRAY [0..TABLIM] OF INTEGER;
13 TEMP : ARRAY [1..5] OF INTEGER;
14
15 BEGIN (* MAIN PROGRAM*)
16 FOR I := 1 TO NUMMAX DO NUM[I] := 0;
17 NUM [2] := 1; NUMVAL := 2; (* INITIAL CONDITIONS *)
18 WRITELN (OUTPUT,
19 ' PALINDROME FORMATION TESTED TO A MAXIMUM OF',PALMAX:4,' DIGITS');
20 WRITELN (OUTPUT);
21 WHILE NUMVAL <= NUMMAX DO
22 BEGIN (*WHILE NUMVAL <= NUMMAX*)
23 CVAL := NUMVAL DIV 2;
24 CVAL2 := CVAL + NUMVAL MOD 2;
25 CMIN := 1;
26 CMAX := 19; (* GETS REDUCED BY 1 BELOW*)
27 IF CVAL > 1 THEN FOR I := 2 TO CVAL DO
28 BEGIN
29 CMIN := CMIN * 19;
30 CMAX := CMAX * 19;
31 END;
32 IF (CVAL2 - CVAL) = 1 THEN
33 BEGIN
34 CMIN := CMIN * 10;
35 CMAX := CMAX * 10;
36 END;
37 CMAX := CMAX - 1;
38
39 WRITELN (OUTPUT,'DATA FOR',NUMVAL:2,'-DIGIT DECIMAL NUMBERS');
40 I := CMAX -CMIN + 1;
41 WRITELN(OUTPUT,' WHICH CAN BE GROUPED INTO',I:5,' CLASSES');
42 WRITELN(OUTPUT);
43 WRITELN(TTY);
44 WRITELN (TTY,'DATA FOR',NUMVAL:2,'-DIGIT DECIMAL NUMBERS'); BREAK;
45 WRITELN(OUTPUT,'CLASS ADDS RESULTING PALINDROME');
46 WRITELN(OUTPUT,
47 ' ONLY CLASSES REQUIRING 4 OR MORE ADDS ARE SHOWN');
48 DCLASS := NUMVAL;
49 FOR I := 1 TO PALMAX DO PAL[I] := 0;
50 FOR I := 0 TO TABMAX DO TAB[I] := 0; (* PALINDROME ADD DATA *)
51 PALTOT := 0; (* COUNT OF NUMBER OF PALINDROMES *)
52 NXTOT := 0; (* COUNT OF NON-PALINDROMES*)
53 NMAX := 0; (* MAXIMUM ADDS FOR A PALINDROME*)
54 NMIN := 500; (* MINIMUN ADDS FOR INTRANSIGENTS *)
55 M := 0;
56 FOR C := CMIN TO CMAX DO
57 BEGIN (* FOR C := CMIN TO CMAX*)
58 I := C;
59 J := CVAL; L := CVAL2 + 1;
60 IF (CVAL2 - CVAL) = 1 THEN
61 BEGIN
62 TEMP[CVAL2] := I MOD 10;
63 NUM[CVAL2] := TEMP[CVAL2];
64 I := I DIV 10;
65 END;
66 FOR K := CVAL DOWNTO 1 DO
67 BEGIN
68 TEMP[K] := I MOD 19;
69 IF TEMP[K] < 10 THEN
70 BEGIN
71 IF K = 1 THEN
72 BEGIN
73 NUM[L] := TEMP[K] -1;
74 NUM[J] := 1;
75 END
76 ELSE
77 BEGIN
78 NUM[L] := TEMP[K];
79 NUM[J] := 0;
80 END;
81 END
82 ELSE
83 BEGIN
84 NUM[L] := 9;
85 NUM[J] := TEMP[K] - 9;
86 END;
87 J := J - 1;
88 L := L + 1;
89 I := I DIV 19;
90 END;
91 (* FOR I := 1 TO NUMVAL DO WRITE(TTY,NUM[I]:1); WRITE(TTY,' '); *)
92 N := 0; (* TO COUNT NUMBER OF ADDITIONS *)
93 FOR I := 1 TO NUMVAL DO PAL[I] := NUM[I];
94 FOR I := NUMVAL + 1 TO PALMAX DO PAL[I] := 0;
95 PALVAL := NUMVAL;
96 WHILE PALVAL <= PALMAX DO
97 BEGIN (* WHILE PALVAL <= PALMAX*)
98 I := 1; J := PALVAL;
99 WHILE ((PAL[I] = PAL [J]) AND (I < J)) DO
100 BEGIN
101 I := I + 1; J := J - 1;
102 END;
103 IF I >= J THEN
104 BEGIN
105 TAB[N] := TAB[N] + 1; (*ADD TO TABLE OF DEPTHS*)
106 IF N > NMAX THEN NMAX := N;
107 IF N > 3 THEN
108 BEGIN
109 FOR J := 1 TO CVAL2 DO
110 BEGIN
111 WRITE (OUTPUT,TEMP[J]:3);
112 WRITE (TTY,TEMP[J]:3);
113 END;
114 WRITE(OUTPUT,N:6,' ');
115 FOR I := 1 TO PALVAL DO
116 BEGIN
117 WRITE(OUTPUT,PAL[I]:1);
118 IF I = 72 THEN
119 BEGIN
120 WRITELN(OUTPUT);
121 WRITE(OUTPUT,' ');
122 END;
123 END;
124 WRITELN(OUTPUT);
125 END;
126 PALTOT := PALTOT + 1;
127 PALVAL := PALMAX + 1;
128 END
129 ELSE (* STILL NOT A PALINDROME*)
130 BEGIN (* TRY ANOTHER ADD*)
131 J := PALVAL; CARRY := 0;
132 FOR I := 1 TO PALVAL DO
133 BEGIN (* ADD NUMBERS*)
134 PAL2[I] := PAL[I] + PAL[J] + CARRY;
135 IF PAL2[I] > 9 THEN
136 BEGIN
137 PAL2[I] := PAL2[I] - 10; CARRY := 1;
138 END
139 ELSE CARRY := 0;
140 J := J - 1;
141 END; (* ADD NUMBERS*)
142 IF CARRY = 1 THEN
143 BEGIN
144 PALVAL := PALVAL +1; PAL2[PALVAL] := 1;
145 END;
146 N := N + 1;
147 FOR I := 1 TO PALVAL DO PAL[I] := PAL2[I];
148 END;
149
150 END (* WHILE PALVAL <= PALMAX*);
151 END; (* FOR C := CMIN TO CMAX*)
152 WRITELN(OUTPUT);
153 WRITELN(OUTPUT,'PALINDROMES GROUPED AS TO THEIR ADD DEPTHS');
154 WRITELN(OUTPUT);
155 WRITELN(OUTPUT,
156 ' ADDS CLASSES ADDS CLASSES ADDS CLASSES ADDS CLASSES');
157 M := 0;
158 FOR I := 0 TO NMAX DO
159 BEGIN
160 IF TAB[I] <> 0 THEN
161 BEGIN
162 WRITE(OUTPUT,I:10,TAB[I]:6);
163 M := M + 1;
164 IF (M MOD 4) = 0 THEN WRITELN(OUTPUT);
165 END;
166 END;
167 WRITELN(OUTPUT);
168 WRITELN(OUTPUT);
169 NUMVAL := NUMVAL + 1;
170 END (*WHILE NUMVAL <= NUMMAX*);
171 END.
0 ERROR(S) DETECTED
HIGHSEG: 0K + 715 WORD(S)
LOWSEG : 0K + 832 WORD(S)
RUNTIME: 00:00.622 ELAPSED: 00:00:20.2 6139 CHARS